package com.sc.nft.task;

import cn.hutool.json.JSONObject;
import com.sc.nft.dao.SecondCollectionSyncDao;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * 该任务处理的都是底层数据，甚至可能有破坏性，所以不能写在业务逻辑中，以免业务端错误调用造成问题
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class SecondCollectionTask {

    private final SecondCollectionSyncDao secondCollectionSyncDao;

    /**
     * 定时清理 SecondCollection 历史数据
     */
    @XxlJob("cleanSecondCollectionHistory")
    public void cleanSecondCollectionHistory() throws Exception {

        // 定时清理 SecondCollection 历史数据，最多清理至 2 月前的历史数据
        final LocalDateTime maxTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).minusMonths(2L);

        JSONObject root = XxlJobHelper.getJobParamAsJson();
        Long stop = root.getLong("stop");

        XxlJobHelper.log("[Begin] Clean SecondCollection data, args => stop: {}", stop);

        long rows = secondCollectionSyncDao.deleteHistory(maxTime, stop);

        XxlJobHelper.log("[End  ] Clean SecondCollection data, args => stop: {}, rows: {}", stop, rows);
    }

//    /**
//     * 同步 SecondCollection 数据到 ES 索引 | 临时数据同步工具，同步过后在后续迭代中删除 (@zlikun | 2024/08)
//     */
//    @XxlJob("syncSecondCollectionToEs")
//    public void syncSecondCollection() throws Exception {
//        // 本质是全量同步，扩大查询范围，保留容错空间
//        Pair<Long, Long> pair = genericQueryHelper.queryIdPair("sc_second_collection");
//        long minId = pair.getFirst();
//        long maxId = pair.getSecond() + 10000L;
//        long limit = 1000L;
//
//        // 使用任务参数干预任务
//        JSONObject param = XxlJobHelper.getJobParamAsJson();
//        if (param.containsKey("minId")) {
//            minId = param.get("minId", Long.class);
//        }
//        if (param.containsKey("maxId")) {
//            maxId = param.get("maxId", Long.class);
//        }
//        if (param.containsKey("limit")) {
//            limit = param.get("limit", Long.class);
//        }
//
//        XxlJobHelper.log("开始同步SecondCollection记录 - ID({}, {}), limit: {}", minId, maxId, limit);
//
//        long rows = secondCollectionSyncDao.syncToEs(minId, maxId, limit);
//
//        XxlJobHelper.log("完成同步SecondCollection记录 - ID({}, {}), limit: {}, rows: {}", minId, maxId, limit, rows);
//        log.info("完成同步SecondCollection记录 - ID({}, {}), limit: {}, rows: {}", minId, maxId, limit, rows);
//    }

}
